let arr = [
    { name: 'John', age: 25 ,like:{firstName: 'John', lastName:'a'}},
    { name: 'Alice', age: 30 },
    { name: 'Bob', age: 28 },
    { name: 'Charlie', age: 27 },
    { name: 'John', age: 25 ,like:{firstName: 'John', lastName:'a'}},
]

// const s = new Set(arr)
// console.log([...s]);

// function  unique(arr){
//     let res = []
//     for(let i = 0; i < arr.length; i++){
//         let isFind = false
//        for(let j = 0; j < res.length; j++){
//            if(equal(arr[i], res[j])){
//              isFind = true
//                break;
//            }   
//          }
//          if(!isFind){
//             res.push(arr[i])
//          }
//     }
//     return res
// }

// function equal(v1, v2){
//     if((typeof v1 === 'object' && v1 !==null) && (typeof v2 === 'object' && v2 !==null)){
//       if(Object.keys(v1).length !== Object.keys(v2).length){
//         return false
//       }
//         for(let key in v1){  
//             if(key in v2){
//                 // v1[key] === v2[key]
//                 if(!equal(v1[key], v2[key])){
//                     return false
//                 } 
//             }else{
//                 return false
//             }
//         }  
//         return true
//     }else{
//         return v1===v2
//     }
    
// }




function unique(arr){
    let res = []
    for(let i = 0; i < arr.length; i++){
        isFind = false
        for(let j = 0; j < res.length; j++){
            if(equal(arr[i], res[j])){
                isFind = true
                break 
            }
        } 
        if(!isFind){
            res.push(arr[i])
        }
    }
    return res
}

function equal(v1, v2){
    if((typeof v1 === 'object' && v1 !== null) && (typeof v2 === 'object' && v2 !== null)){
        if(Object.keys(v1).length === Object.keys(v2).length){
            for(let key in v1){
                if(key in v2){
                    if(!equal(v1[key], v2[key])){
                        return false
                    }
                }
            }
            return true
        }else{
            return false
        }
    } else{
        return v1===v2
    }
}

console.log(unique(arr));